home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 2001-10-06 | 35.8 KB | 1,279 lines
var processInviteTimer = -1; // XXX Global to determine if our onload handler has been called yet. // For some reason, our onunload handler is getting called before onload // on the first time we create App.xul. This is a workaround. var gFirstTime = 1; function GoAway( target ) { var name = target.getAttribute('MsgText'); if(name=='') { try { name= document.getElementById('tbAway').getElementsByTagName("menuitem")[1].getAttribute('MsgText') } catch (e) { dump("goAway(): Some error finding tbAway message!\n Setting default backup message.\n"); name=aimString("away.DefaultMessage"); } } locateManager = aimLocateManager(); if ( locateManager ) locateManager.SetUserInfoAwayMessage(name); } var targetElement = null; function GoAwayWait(target,wait) { targetElement = target; setTimeout('GoAway( targetElement )',wait) } /* * Function: AimAppOnWndLoad() * * Arguments: None * * Return: None * * Description: Called once app.xul has finished loading. Adds observer * AimSessionObserver to the AimDataSource. Initializes the * sidebar. */ function AimAppOnWndLoad() { HideMenus(); // dump("AimAppOnWndLoad()\n"); // XXX See note at the top of the file gFirstTime = 0; // Initialize for current online state var state = aimRDFDataSource().GetTarget(aimRDFSession(), aimRDFSessionState(), true); if (state == null) state = aimRDF().GetLiteral("Register"); AimSessionObserver.onAssert(aimRDFDataSource(), aimRDFSession(), aimRDFSessionState(), state); aimRDFDataSource().AddObserver(AimSessionObserver); setTimeout("CheckBuddyPanel()",500); setAdTimer(); } function HideMenus() { var menu; if ( aimIsShrimp() == true ) { menu=document.getElementById('menu_Help'); if(menu != null && menu != undefined) menu.setAttribute("hidden", "true"); } else { menu=document.getElementById('menu-services'); if(menu != null && menu != undefined) menu.setAttribute("hidden", "true"); menu=document.getElementById('menu-actions'); if(menu != null && menu != undefined) menu.setAttribute("hidden", "true"); menu=document.getElementById('menu-ShrimpHelp'); if(menu != null && menu != undefined) menu.setAttribute("hidden", "true"); menu=document.getElementById('navprintplus'); if(menu != null && menu != undefined) menu.setAttribute("hidden", "true"); } } /* * Function: SetProcessTimer( interval ) * * Arguments: * interval -- timeout in milliseconds * * Return: None * * Description: This function sets the global (to App.js) timer * processInviteTimer to fire after the specified interval * * Author: Syd 4/20/2001 */ function SetProcessTimer( interval ) { processInviteTimer = setTimeout('ProcessInviteList()',interval); } /* * Function: ClearProcessTimer() * * Arguments: None * * Return: None * * Description: if the global processInviteTimer != -1, then * clear the timer, otherwise return. This function should * be called by the onunload handler or at anytime the state * goes from online to offline * * Author: Syd 4/20/2001 */ function ClearProcessTimer() { if ( processInviteTimer != -1 ) { window.clearTimeout( processInviteTimer ); processInviteTimer = -1; } } /* * Function: AimAppOnWndUnload() * * Arguments: None * * Return: None * * Description: Called once app.xul has been unloaded. Removes observer * AimSessionObserver from the AimDataSource. */ function AimAppOnWndUnload() { // XXX See note at the top of the file ClearProcessTimer(); if(gFirstTime == 1) return; dump( "**************remove observer!!!\n" ); aimRDFDataSource().RemoveObserver(AimSessionObserver); } //************ Command Handling **************** /* * Function: cmdNewBrowser() * * Arguments: None * * Return: None * * Description: Function invoked from menu or toolbar to create a new * browser window. * * Bugs: URL is hardcoded. Needs to open a user-specified preference. */ function cmdNewBrowser() { aimCmdNewBrowser("http://home.netscape.com"); } /* * Function: cmdNewEmail() * * Arguments: None * * Return: None * * Description: Function invoked from menu or toolbar to create a new * messenger window. */ function cmdNewEmail() { aimCmdNewEmail(); } function cmdNewChat(invScreenName,invProposal,invScreenNames,toExistingWindow,invMode) { inviteArgsObj = { inviteProposalScreenName: invScreenName, inviteProposalObj: invProposal, invitedScreenNames: invScreenNames, inviteToExistingWindow: toExistingWindow, inviteMode: invMode } window.openDialog('chrome://aim/content/chatInviteBuddy.xul','_blank','chrome,all,dialog=no',inviteArgsObj); } /* * Function: cmdNewIM() * * Arguments: None * * Return: None * * Description: Function invoked from menu or toolbar to create a new IM * window. Loads the window into a pre-connect state, e.g., the * dialog consists of screen name field and an editor. This * function determines which buddy is selected in the list. * If a buddy is selected (the first one found) and is online, * the screenname field in the IM window is initialized to that * buddy. Otherwise, the screen name field is set to "". */ function cmdNewIM() { //var sidebarframe=top.AIMDocumentPath; var sidebarframe=getsidebarframe(); var tab = sidebarframe.document.getElementById("OnlineOrgTabPanel"); var tree; if ( tab.getAttribute('index') == 0 ) // in the online tab and the user hit delete tree = sidebarframe.document.getElementById("OnlineBuddies"); else tree = sidebarframe.document.getElementById("ListSetup"); if ( AimOnlineAway() ) ComeBack(); try { screenName = tree.selectedItems[0].getAttribute("ScreenName"); } catch (e) { screenName = null; } if (!aimBuddyIsOnline(screenName)) { screenName = null; } if (screenName != null) { var pIAimIM = aimIMObject(); if (pIAimIM) var pWindow = pIAimIM.GetExistingIM(screenName); if (pWindow) { pWindow.focus(); return; } } aimIMInvokeIMForm(screenName, null); } /* * Function: getSelectedBuddiesFromList() * * Arguments: None * * Return: array of strings of buddies * that are currently selected (expands Groups to all buddies in group). * * Description: Function invoked via cmdNewChatSidebar to poll the * Buddy list to find out which buddies (and expanded groups are selected). * This function will always return an Array, the first element will * be null if there was a problem, or no buddies selected. * */ function getSelectedBuddiesFromList() { var sidebarframe=top.AIMDocumentPath; var tree = sidebarframe.document.getElementById("OnlineBuddies"); var items=tree.selectedItems; //Array of all the selected elements, both groups and buddies var selectedBuddies = new Array(); var l = 0; //Keep track of the selectedBuddies array. if (items.length!=0) { for (var t=0;t<items.length;t++) { /* Make sure the group list is open otherwise we can not * iterate through the children. This has the added side * effect that groups are opened when you click on them * and hit IM or Chat. */ items[t].setAttribute("open", true); if (items[t].childNodes.length > 1) //If this is a group. { var buddies = null; for (var j = 0; j != items[t].childNodes.length; j++) { if (items[t].childNodes[j].nodeName == "treechildren") { buddies = items[t].childNodes[j].childNodes; break; } } if (buddies) { for (var k = 0; k != buddies.length; k++) { //Make sure the buddy isn't already in this list. if (selectedBuddies.toString().search(buddies[k].getAttribute("ScreenName")) == -1) { //Add the buddy to the list. selectedBuddies[l++] = buddies[k].getAttribute("ScreenName"); } } } } else //This item is a single buddy. { //Make sure the buddy isn't already in this list. if (selectedBuddies.toString().search(items[t].getAttribute("ScreenName")) == -1) { //Add the buddy to the list. selectedBuddies[l++]=items[t].getAttribute("ScreenName"); } } } } return selectedBuddies; } /* * Function: cmdSignOn() * * Arguments: None * * Return: None * * Description: Called from menu item or toolbar. Passes control to sidebar * panel cmdSignOn() (see SidebarPanel/SidebarPanel.js) */ function cmdSignOn() { //var sidebarframe = top.frames["AppPanel"]; //var sidebarframe=top.AIMDocumentPath; var sidebarframe=getsidebarframe(); if(sidebarframe) { sidebarframe.cmdPanelSignOn(); } else dump("XXX Error : no sidebarframe\n"); } /* * Function: cmdSignOff() * * Arguments: None * * Return: None * * Description: Calls aimSessionLogoff to close current IM session. * * */ function cmdSignOff() { /* Set pref to be false so that auto login doesnt get fired for every launch */ aimPrefsManager().SetBoolPref("aim.session.appfirstlogin", false, null,true); aimSessionLogoff(); } /* * Function: cmdCancelSignOn() * * Arguments: None * * Return: None * * Description: Called during connection startup if cancel button is pressed. * Cancels the IM session by calling cmdSignOff(). * */ function cmdCancelSignOn() { cmdSignOff(); } /* * Function: cmdClose() * * Arguments: None * * Return: None * * Description: Invoked from close menu item, or from cmdSignOffAndClose(), * below. Causes the app window to be closed. * */ function cmdClose() { aimCmdClose(); } /* * Function: cmdSignOffAndClose() * * Arguments: None * * Return: None * * Description: Called in response to user selecting signoff and close menu * item. Signs off the current IM session and closes the * standalone window. */ function createInstance( contractid, iidName ) { var iid = eval( "Components.interfaces." + iidName ); return Components.classes[ contractid ].createInstance( iid ); } function cmdExportBuddyList() { nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); fp.init(window, aimString("title.exportbudlist"), nsIFilePicker.modeSave); fp.appendFilter(aimString("budlist.title"), aimString("budlist.filter")); fp.appendFilters(nsIFilePicker.filterAll); try { var ret = fp.show(); if ( ret == nsIFilePicker.returnOK || ret == nsIFilePicker.returnReplace) { var status; status = aimBuddyExportBuddyList(fp.file); /* if ( status == false ) aimErrorBox(aimString("msg.exporttryagain")); else aimErrorBox(aimString("msg.exportsuccess")); */ } } catch (ex) { aimErrorBox(aimString("msg.exportfailure")); } return; } function cmdImportBuddyList() { nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); fp.init(window, aimString("title.importbudlist"), nsIFilePicker.modeOpen); fp.appendFilter(aimString("budlist.title"), aimString("budlist.filter")); fp.appendFilters(nsIFilePicker.filterAll); try { var ret = fp.show(); if ( ret == nsIFilePicker.returnOK ) { var status; aimBuddyImportBuddyList(fp.file); } } catch (ex) { aimErrorBox(aimString("msg.importfailure")); } return; } function cmdSignOffAndClose() { cmdSignOff(); cmdClose(); } /* * Function: cmdAddBuddy() * * Arguments: None * * Return: None * * Description: Called in response to menu item of toolbar button in standalone * for adding a buddy to a buddy group. Opens BuddyAddBuddy.xul to * place a dialog that can be used to add a buddy. * * Bugs: Needs to support inline editing. * */ function cmdAddBuddy() { //var sidebarframe = top.frames["AppPanel"]; //var sidebarframe = window // in new UI land //dump("AIMDocumentPath: "+top.AIMDocumentPath+"\n"); //sidebarframe=top.AIMDocumentPath; var sidebarframe=getsidebarframe(); var foundOne = false; var selectedGroup = ""; var elt = sidebarframe; if (!sidebarframe) elt = window; var tree = elt.document.getElementById("ListSetup"); if (!tree ) return; var groups = aimBuddyTreeFindGroups( tree ); if ( !groups || groups.length == 0 ) { aimErrorBox(aimString("msg.NoGroups")); return; } var selectedGroups = new Array(); var j=0; for (var i = 0; i != groups.length; i++) { if (groups[i].getAttribute("selected") == "true") { selectedGroups[j++] = groups[i].getAttribute("Name"); } } openDialog("chrome://aim/content/BuddyAddBuddy.xul", "", "modal=yes,titlebar,chrome", selectedGroups, tree, null); } /* * Function: cmdAddGroup() * * Arguments: None * * Return: None * * Description: Called in response to menu item of toolbar button in standalone * for adding a buddy group. Opens BuddyAddGroup.xul to place a * dialog that can be used to add a buddy group. * * Bugs: Needs to support inline editing. * */ function cmdAddGroup() { openDialog("chrome://aim/content/BuddyAddGroup.xul", "", "modal=yes,titlebar,chrome"); } /* * Function: SelectedGroup() * * Arguments: None * * Return: None * * Description: Constructor function for SelectedGroup objects * * */ function SelectedGroup() { var selected = "false"; var name = null; var selectedBuddies = null; } /* * Function: SelectedBuddy() * * Arguments: None * * Return: None * * Description: Constructor function for SelectedBuddy objects * */ function SelectedBuddy() { var selected = "false" var name = null; } /* * Function: cmdDelete() * * Arguments: None * * Return: None * * Description: Called in response to user clicking delete toolbar button or * selecting delete menu item. Deletes all selected groups (and * the buddies they contain) and all selected buddies. */ function cmdDelete() { // Delete all selected groups and or buddies //var sidebarframe = top.frames["AppPanel"]; //var sidebarframe=window // in new UI land //sidebarframe=top.AIMDocumentPath; var sidebarframe=getsidebarframe(); var selectedGroup = ""; var wasSelected = false; var tab = sidebarframe.document.getElementById("OnlineOrgTabPanel"); var tree; if ( tab.getAttribute('index') == 0 ) // in the online tab and the user hit delete tree = sidebarframe.document.getElementById("OnlineBuddies"); else tree = sidebarframe.document.getElementById("ListSetup"); if (!tab) return; if (!tree ) return; var groups = aimBuddyTreeFindGroups( tree ); // dump( "Groups is " + groups + "\n" ); // dump("Num groups is " + groups.length + "\n"); top.selectedGroups = new Array(); for (var i = 0; i != groups.length; i++) { // make a record for this group top.selectedGroups[i] = new SelectedGroup; top.selectedGroups[i].selectedBuddies = new Array(); top.selectedGroups[i].name = groups[i].getAttribute("Name"); if (groups[i].getAttribute("selected") == "true") { wasSelected = "true"; top.selectedGroups[i].selected = "true"; } else top.selectedGroups[i].selected = "false"; // find the buddy nodes for this group. var buddies = null; for (var j = 0; j != groups[i].childNodes.length; j++) { if (groups[i].childNodes[j].nodeName == "treechildren") { // found it. buddies = groups[i].childNodes[j].childNodes; break; } } // if there were buddies, collect info on them if (buddies) { for (var j = 0; j != buddies.length; j++) { // create a record for this buddy top.selectedGroups[i].selectedBuddies[j] = new SelectedBuddy; if (buddies[j].getAttribute("selected") == "true") { // buddy is selected. Save the name // and set the selected flag to true wasSelected = "true"; top.selectedGroups[i].selectedBuddies[j].name = buddies[j].getAttribute("ScreenName"); top.selectedGroups[i].selectedBuddies[j].selected = "true"; } else top.selectedGroups[i].selectedBuddies[j].selected = "false"; } } } // now we have all we need to know. Delete the selected buddies // and the selected groups for ( var i = 0; i != top.selectedGroups.length; i++ ) { selectedGroup = top.selectedGroups[i].name; // first the group if ( top.selectedGroups[i].selected == "true" ) { if ( selectedGroup != null && selectedGroup != "" ) { answer = top.confirm( aimString("confirm.DeleteGroup").replace(/%GroupName%/, selectedGroup) ); if ( answer == true ) aimBuddyRemoveBuddyGroup(selectedGroup); } } else { // we didn't delete the group, so see if any buddies // in the group need to be deleted. for ( var j = 0; j != top.selectedGroups[i].selectedBuddies.length; j++ ) { if ( top.selectedGroups[i].selectedBuddies[j].selected == "true" ) { selectedBuddy = top.selectedGroups[i].selectedBuddies[j].name; if ( selectedBuddy && selectedBuddy != "" ) { //dump( "Deleting " + selectedBuddy + " from " + selectedGroup + "\n" ); answer = top.confirm( aimString("confirm.DeleteBuddy").replace(/%BuddyName%/, selectedBuddy).replace(/%GroupName%/, selectedGroup) ); if ( answer == true ) aimBuddyRemoveBuddy(selectedGroup, selectedBuddy); } } } } } if ( wasSelected == false ) aimErrorBox( aimString("msg.NothingToDelete") ); } function cmdAbEditCard() { //sidebarframe=top.AIMDocumentPath; var sidebarframe=getsidebarframe(); var selectedGroup = ""; var wasSelected = false; var tree = sidebarframe.document.getElementById("ListSetup"); var tab = sidebarframe.document.getElementById("OnlineOrgTabPanel"); if ( tab.getAttribute('index') == 0 ) // in the online tab and the user hit delete return; var groups = aimBuddyTreeFindGroups( tree ); // dump( "Groups is " + groups + "\n" ); // dump("Num groups is " + groups.length + "\n"); top.selectedGroups = new Array(); for (var i = 0; i != groups.length; i++) { // make a record for this group top.selectedGroups[i] = new SelectedGroup; top.selectedGroups[i].selectedBuddies = new Array(); top.selectedGroups[i].name = groups[i].getAttribute("Name"); if (groups[i].getAttribute("selected") == "true") { wasSelected = "true"; top.selectedGroups[i].selected = "true"; } else top.selectedGroups[i].selected = "false"; // find the buddy nodes for this group. var buddies = null; for (var j = 0; j != groups[i].childNodes.length; j++) { if (groups[i].childNodes[j].nodeName == "treechildren") { // found it. buddies = groups[i].childNodes[j].childNodes; break; } } if (buddies) { for (var j = 0; j != buddies.length; j++) { top.selectedGroups[i].selectedBuddies[j] = new SelectedBuddy; if (buddies[j].getAttribute("selected") == "true") { // buddy is selected. Save the name // and set the selected flag to true wasSelected = "true"; top.selectedGroups[i].selectedBuddies[j].name = buddies[j].getAttribute("ScreenName"); top.selectedGroups[i].selectedBuddies[j].selected = "true"; } else top.selectedGroups[i].selectedBuddies[j].selected = "false"; } } } for ( var i = 0; i != top.selectedGroups.length; i++ ) { selectedGroup = top.selectedGroups[i].name; if ( top.selectedGroups[i].selected == "true" ) { aimErrorBox(aimString("msg.SelectBuddy")); } else { for ( var j = 0; j != top.selectedGroups[i].selectedBuddies.length; j++ ) { if ( top.selectedGroups[i].selectedBuddies[j].selected == "true" ) { selectedBuddy = top.selectedGroups[i].selectedBuddies[j].name; if ( selectedBuddy && selectedBuddy != "" ) { var aimABInfo1= aimGetIMManager().QueryInterface(Components.interfaces.nsIAimABInfo); var abURI= new Object(); aimABInfo1.GetABURI(selectedBuddy, abURI); var abURI = aimABInfo().GetABURI(selectedBuddy); var rdf = aimRDF(); var card = rdf.GetResource(abURI); card = card.QueryInterface(Components.interfaces.nsIAbCard); //This is not currently suppoerted by AddressBook - ToDO later// //var updateview=DisplayCardViewPane(abURI); //Workaround - Launch addressbook instead of ab card for selected buddy //toOpenWindowByType("mail:adressbook", "chrome://messenger/content/addressbook/addressbook.xul"); goEditCardDialog("moz-abmdbdirectory://abook.mab",card,null,abURI); } } } } } } function cmdCustom() { url = aimString("app.custom.url"); aimCmdNewBrowser(url); } function cmdAdClick() { //var adLink = aimString("app.ad.link"); var adLink; if (aimIsShrimp()) adLink = aimRegionString("shrimp.ad.link") else adLink = aimRegionString("app.ad.link"); var adMini = aimPrefsManager().GetBoolPref("aim.ad.minibrowser", null, true); // adMini will be true only for shrimp if (adMini) { var tearWin = window.open(adLink,adLink,'personalbar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,menubar=no'); if (window.focus) tearWin.focus(); } else aimCmdNewBrowser(adLink); } var ad_access=1; function setAdTimer() { var adButton = top.document.getElementById("adButton"); //var adImage = aimRegionString("app.ad.image")+"?access=" + ad_access; var adImage; if (aimIsShrimp()) adImage = aimRegionString("shrimp.ad.image")+"?access=" + ad_access else adImage = aimRegionString("app.ad.image")+"?access=" + ad_access; ad_access++; var adTimer = aimString("app.ad.timer"); if(adButton) { adButton.setAttribute("src", adImage); } if(window) window.setTimeout('setAdTimer()', adTimer); } function aboutShrimp(url) { var tearWin = window.open(url,url,'personalbar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,menubar=no'); if (window.focus) tearWin.focus(); } function getSidebarDs() { var PANELS_RDF_FILE = "UPnls"; try { var locator_service = Components.classes["@mozilla.org/file/directory_service;1"].getService(); if (locator_service) locator_service = locator_service.QueryInterface(Components.interfaces.nsIProperties); var sidebar_file = locator_service.get(PANELS_RDF_FILE, Components.interfaces.nsIFile); if (!sidebar_file.exists()) { //Sidebar panels file does not exist? return; } var file_url = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIFileURL); file_url.file = sidebar_file; return file_url.spec; } catch (ex) { throw(ex); } } function CheckBuddyPanel() { var RDF = aimRDF(); var panel_list =RDF.GetDataSource(getSidebarDs()).GetTarget(RDF.GetResource("urn:sidebar:current-panel-list"),RDF.GetResource("http://home.netscape.com/NC-rdf#"+"panel-list"), true); if (panel_list) { panel_list.QueryInterface(Components.interfaces.nsIRDFResource); } var container = Components.classes["@mozilla.org/rdf/container;1"].createInstance(); container = container.QueryInterface(Components.interfaces.nsIRDFContainer); try { container.Init(RDF.GetDataSource(getSidebarDs()), panel_list); } catch (ex) { throw(ex); } var panel_resource = RDF.GetResource("urn:sidebar:panel:im-panel"); var im_resource=RDF.GetResource("urn:sidebar:3rdparty-panel:chrome://aim/content/SidebarPanel.xul"); var panel_index = container.IndexOf(panel_resource); var panel_index2 = container.IndexOf(im_resource); if ((panel_index == -1) && (panel_index2==-1)) { if ((typeof window.sidebar == "object") && (typeof window.sidebar.addPanel == "function")) { window.sidebar.addPanel ("Buddy List","chrome://aim/content/SidebarPanel.xul",""); } } } /****** * Request info about a user and display it in a tooltip (after callback). ******/ function fillInfoTooltip(aTreecell) { // this check is required to prevent redundant // re-requests while waiting for the callback if (!aTreecell._RequestingInfo) { var name = getScreenNameFromNode(aTreecell); var tooltip = document.getElementById("infoTooltip"); if (name && name != "" && tooltip) { // if this is a mac do this bad hack to hide the tooltip if (navigator.appVersion.indexOf("Macintosh") != -1) document.getElementById("hideload").setAttribute("collapsed", "true"); else tooltip.setAttribute("collapsed", "true"); aTreecell._RequestingInfo = true; // send the request and wait for callback var listenerCap = new TooltipCapListener(aTreecell, tooltip); try { aimLocateManager().RequestUserInfoCapabilities(listenerCap, name); } catch (ex) { dump("* ERROR: unable to retrieve AIM user info for '"+name+"'\n* REASON: " + ex); } } } } /****** * Search up the tree for first treeitem node. ******/ function getScreenNameFromNode(aNode) { var node = aNode; while (node.localName != "treeitem") { node = node.parentNode; } return node ? node.getAttribute("ScreenName") : null; } /****** * Returns a string with the difference between two dates looking like: "x days, x hours, x minutes." * Both parameters are dates in seconds since 1/1/1970 00:00:00. ******/ function getPrettyDateDiff(aDate2, aDate1) { var diff = aDate2-aDate1; var pretty = ""; var dayDiff = Math.floor(diff / 86400); diff %= 86400; if (dayDiff > 0) { pretty += dayDiff + " day" + (dayDiff == 1 ? "" : "s"); } var hourDiff = Math.floor(diff / 3600); diff %= 3600; if (hourDiff > 0) { pretty += (pretty.length > 0 ? ", " : "") + hourDiff + " " + aimString("tooltip.hour") + (hourDiff == 1 ? "" : "s"); } var minDiff = Math.floor(diff / 60); if (minDiff > 0) { pretty += (pretty.length > 0 ? ", " : "") + minDiff + " " + aimString("tooltip.minute") + (minDiff == 1 ? "" : "s"); } return pretty; } /****** * Event listener used for RequestUserInfoCapabilities ******/ function TooltipCapListener(aTreecell, aTooltip) { this.mTreecell = aTreecell; this.mTooltip = aTooltip; } TooltipCapListener.prototype = { OnRequestUserInfoCapabilitiesComplete: function(aScreenName, aUserObj) { var now = new Date().getTime()/1000; // TODO: search within mTooltip for text elements instead of id search // fill the screen name var elName = document.getElementById("infoTooltipName"); var displayname; var nickname; aimABInfo = aimGetIMManager().QueryInterface(Components.interfaces.nsIAimABInfo); if (aimABInfo != null) { try { nickname = aimABInfo.GetNickname(aScreenName); } catch (e) {} if (nickname == null || nickname == "" || nickname == undefined) { // if the code was caught, displayname will be undefined try { displayname = aimABInfo.GetDisplayName(aScreenName); } catch (e) {} // if the code was caught, displayname will be undefined if (displayname == null || displayname == "" || displayname == undefined) elName.setAttribute("value", aScreenName); else elName.setAttribute("value", displayname); } else elName.setAttribute("value", nickname); } else elName.setAttribute("value", nickname); dump ("aScreenName is: " + aScreenName + "\n"); dump ("nickname is: " + nickname + "\n"); dump ("displayname is: " + displayname + "\n"); dump ("elName.value is: " + elName.getAttribute("value") + "\n"); // fill the warnings line var warnings = document.getElementById("infoTooltipWarnings"); warnings.setAttribute("value", aUserObj.GetWarningPercent() + "%"); var warningsId = document.getElementById("infoTooltipWarningsId"); warningsId.setAttribute("value", aimString("tooltip.warnings") + ":"); // fill the online line var elOnline = document.getElementById("infoTooltipOnlineTime"); var since = aUserObj.GetOnlineSinceTime(); elOnline.setAttribute("value", getPrettyDateDiff(now, since)); var elOnlineId = document.getElementById("infoTooltipOnlineTimeId"); elOnlineId.setAttribute("value", aimString("tooltip.online") + ":"); // fill the status line var elStatus = document.getElementById("infoTooltipStatus"); var elStatusTime = document.getElementById("infoTooltipStatusTime"); if (aUserObj.IsIdle()) { elStatus.setAttribute("value", aimString("tooltip.idle") + ":"); var statusDate = aUserObj.GetIdleSinceTime(); elStatusTime.setAttribute("value", getPrettyDateDiff(now, statusDate)); } else if (aUserObj.IsAway()) { elStatus.setAttribute("value", aimString("tooltip.status") + ":"); elStatusTime.setAttribute("value", aimString("tooltip.away")); } else { elStatus.setAttribute("value", aimString("tooltip.status") + ": "); elStatusTime.setAttribute("value", aimString("tooltip.active")); } // fill in the Service Type (AOL, Internet, Administrator...) var elFlagService = document.getElementById("infoTooltipFlagValue"); var flagServiceValue = aUserObj.GetFlags(); var serviceString = ""; var serviceEnums = Components.interfaces.nsAimServiceTypes; if (flagServiceValue & serviceEnums.Transient) serviceString = aimString("IdsflagTrial.label") + " "; if (flagServiceValue & serviceEnums.Aol) serviceString = serviceString + aimString("IdsflagAol.label") + " "; if (flagServiceValue & serviceEnums.Free) serviceString = serviceString + aimString("IdsflagInternet.label") + " "; if (flagServiceValue & serviceEnums.Administrator) serviceString = serviceString + aimString("IdsflagAdministrator.label") + " "; elFlagService.setAttribute("value", serviceString); var elFlagServiceId = document.getElementById("infoTooltipFlag"); elFlagServiceId.setAttribute("value", aimString("tooltip.service") + ":"); // fill in the Capabilities var elCapabilities = document.getElementById("capabilitiesValue"); try { var capMask = aUserObj.GetCapabilities(); var capEnums = Components.interfaces.nsAimCapabilitesMask; var capString = ""; if (capEnums.chat & capMask) capString += aimString("tooltip.chat"); elCapabilities.setAttribute("value", capString); } catch (e) {} var elCapabilitiesId = document.getElementById("capabilities"); elCapabilitiesId.setAttribute("value", aimString("tooltip.capabilities") + ":"); // show the tooltip // if this is a mac do this bad hack to hide the tooltip if (navigator.appVersion.indexOf("Macintosh") != -1) document.getElementById("hideload").removeAttribute("collapsed"); else this.mTooltip.removeAttribute("collapsed"); this.mTreecell._RequestingInfo = false; }, OnRequestUserInfoCapabilitiesError: function(aScreenName, aError) { dump("Error while loading user capabilities information: " + aError); this.mTreecell._RequestingInfo = false; } }; function cmdChangePassword() { window.openDialog('chrome://aim/content/AimChangePassword.xul','','modal=no,titlebar,chrome,centerscreen',null); } function cmdConfirmAccount() { window.openDialog('chrome://aim/content/AimConfirmAccount.xul','','modal=yes,titlebar,chrome,centerscreen',null); } /* * Name: CommandUpdate_App * * Arguments: none. * * Description: * * This function is called by the command update handler. Based on the events you specify this get called. * Right now it is used only by delete. * Return Value: none * * Author: Suresh Kasinathan<suresh@netscape.com> 8/29/01 * */ function CommandUpdate_App() { goUpdateCommand("cmd_delete"); } var AppController = { supportsCommand: function(command) { switch (command) { case "cmd_delete": return true; break; default: return true; } }, isCommandEnabled: function(command) { switch (command) { case "cmd_delete": return true; break; default: return true; } }, doCommand: function(command) { switch (command) { case "cmd_delete": cmdDelete(); break; } }, onEvent: function(event) { dump("Nothing for now ...\n"); } }; /* * Name: SetupCommandUpdateHandlers * * Arguments: none. * * Description: * * This function initializes command update handler. This is called by AppSessionObserver. * * Return Value: none * * Author: Suresh Kasinathan<suresh@netscape.com> 8/29/01 * */ function AimSetupCommandUpdateHandlers() { var sidebarframe=getsidebarframe(); var onlineTree; var listsetupTree; if (sidebarframe) { onlineTree = sidebarframe.document.getElementById("OnlineBuddies"); listsetupTree = sidebarframe.document.getElementById("ListSetup"); } else { onlineTree = document.getElementById("OnlineBuddies"); listsetupTree = document.getElementById("ListSetup"); } if (onlineTree) { onlineTree.controllers.appendController(AppController); } if (listsetupTree) { listsetupTree.controllers.appendController(AppController); } } /* * Name: onSelectionChange * * Arguments: none. * * Description: * * This function is called whenever the selection changes in Online tree and list setup tree. * * Return Value: none * * Author: Suresh Kasinathan<suresh@netscape.com> 8/29/01 * */ function onSelectionChange() { goUpdateCommand("cmd_delete"); }